/*******************************************************************************
 *    系统名称   : 约汗乐动力接口/后台管理系统
 *    客户             : 约汗乐动力
 *    文件名        ： JsonDateProcessor.java
 *              (C) Copyright 博智乐创 Corporation 2015
 *               All Rights Reserved.
 *              http://www.bozlc.com
 * *****************************************************************************
 *    注意： 本内容仅限于约汗乐动力软件公司内部使用，未经许可禁止转发
 ******************************************************************************/
package com.xiake.utils;

/**
 * Title: JSON帮助类
 * Description: JSON日期处理器
 * @author 齐龙
 */

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

// TODO: Auto-generated Javadoc
/**
 * The Class JsonDateProcessor.
 *
 * @author tony
 * @see 
 * @since v1.1
 * @description 
 * @created 2014-12-11
 * @history 
 */
public class JsonDateProcessor implements JsonValueProcessor {
	
	/** The Constant DEFAULT_DATE_PATTERN. */
	public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
	
	/** The date format. */
	private DateFormat dateFormat;

	/**
	 * Instantiates a new json date processor.
	 */
	public JsonDateProcessor() {
		dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
	}

	/**
	 * 构造方法.
	 * 
	 * @param datePattern 日期格式
	 */
	public JsonDateProcessor(String datePattern) {
		try {
			dateFormat = new SimpleDateFormat(datePattern);
		} catch (Exception ex) {
			dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
		}
	}

	/* (non-Javadoc)
	 * @see net.sf.json.processors.JsonValueProcessor#processArrayValue(java.lang.Object, net.sf.json.JsonConfig)
	 */
	public Object processArrayValue(Object value, JsonConfig jsonConfig) {
		return process(value);
	}

	/* (non-Javadoc)
	 * @see net.sf.json.processors.JsonValueProcessor#processObjectValue(java.lang.String, java.lang.Object, net.sf.json.JsonConfig)
	 */
	public Object processObjectValue(String key, Object value,
			JsonConfig jsonConfig) {
		return process(value);
	}

	/**
	 * Process.
	 *
	 * @param value the value
	 * @return the object
	 */
	private Object process(Object value) {
		try {
			return dateFormat.format((Date) value);
		} catch (Exception e) {
			return "";
		}
	}
	
	/**
	 * 备注:
	 * 使用JsonConfig转换时如果日期为空，则抛出空指针。问题原因及解决方案
	 */
	/**
	 Json转Java的时候，调用ezmorph-1.0.6.jar中的DateMorpher类有问题:如果date的格式错误或者为空（总之就是转换错误）的时候，没有对错误处理。
	 net.sf.ezmorph.object.DateMorpher中源码如下：
		try{
			return dateParser.parse( strValue.toLowerCase() );  
		} catch( ParseException pe ){   
			// ignore exception, try the next format   
		}   
 	将其改为
		try{
			return dateParser.parse( strValue.toLowerCase() );  
		} catch( ParseException pe ){   
			return null;  
		}
	重新编译ezmorph-1.0.6.jar
	*/

}